﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text;

using Library;
using System.Data;
using Library;
namespace WCF
{
    // NOTE: If you change the class name "Login" here, you must also update the reference to "Login" in App.config.
    public class Login : ILogin
    {
        //MainForm f = new MainForm();
        public static string mConnect = StaticClass.MainConnect;
        private string msql = "";
        public DGC_Library mLibrary = new DGC_Library(mConnect);
        public DGC_File mFile = new DGC_File();
        public static string lMaNguoiDung = "";
        public static string lHost = StaticClass.mHost;
        public static string lUser = "";
        public void DoWork()
        {
        }

        public static bool checkLogin = false;

        public string GetTenSinhVien(string ms_hssv)
        {
            msql = "Select hovaten from tb_hssv where ms_hssv='" + ms_hssv+"'";           
            mFile.WriteFile("Message", "Client đang thực thi menthod: GetTenSinhVien");
            return mLibrary.Timten(msql);

            string method = lMaNguoiDung + "--" + DateTime.Now + "--" + "Lấy thông tin sinh viên";
            msql = "insert tb_nhatky([user],method)" +
                    " values('" + lMaNguoiDung + "',N'" + method + "')";
            mLibrary.RunProc(msql);
        }

        public int GetIDTruyCap(string user)
        {
            int a = 0;
            msql = "Select max(id) from tb_truycap where [user]='" + user + "'";
            a = mLibrary.Timso_int(msql);
            return a;
        }
        public bool KiemTraChoPhepThi(string idThi)
        {
            bool value=false;
            msql = "Select Thi from tb_truycap where id=" + idThi;
            string thi = mLibrary.Timten(msql);// "True";
            if (thi == "True")//cho thi
            {
                value = true;
            }
            return value;
        }
        public bool KiemTraThuBaiThi(string idThi)
        {
            bool value = false;
            msql = "Select Thubai from tb_truycap where id=" + idThi;
            string thi = mLibrary.Timten(msql);// "True";
            if (thi == "True")//cho thu
            {
                value = true;
            }
            return value;
        }


        public void TaoDataKhiChonMon(string MaNguoiDung,string Ms_hssvthi,string mon,int socauhoi,string lanthi)
        {
           
            //Kiem tra
            msql = "select * from dbo.tb_HssvthiCT where ms_hssvthi=" + Ms_hssvthi + " and lanthi= " + lanthi;
            DataTable dt = mLibrary.GetDataTable(msql, "DT");
            if (dt.Rows.Count == 0)//chua co du lieu
            {
                DataTable DT1 = new DataTable();
                DT1.Columns.Add("Ms_hssvthi");
                DT1.Columns.Add("cauhoi");
                DT1.Columns.Add("dapan");
                DT1.Columns.Add("lanthi");


                for (int j = 1; j <= socauhoi; j++)
                {
                    string dapan = "";
                    msql = "select * from dbo.tb_Nganhangdethi where ms_mondaotao='" + mon + "' and cauhoi=" + j;
                    DataTable dtCaui = mLibrary.GetDataTable(msql, "A");
                    if (dtCaui.Rows.Count != 0)
                    {
                        for (int j1 = 1; j1 < dtCaui.Rows.Count; j1++)
                        {
                            if (dtCaui.Rows[j1]["ttdapan"].ToString() == "True")
                            {
                                dapan = dapan + dtCaui.Rows[j1]["cauhoiid"].ToString() + ";";
                            }
                        }
                    }
                    //them vao table tmp
                    DT1.Rows.Add(Ms_hssvthi, j, dapan, lanthi);
                }
                //Random tren table tmp
                DataTable DTCOPY=DT1.Copy();
                DataTable DT2 = new DataTable();
                DT2.Columns.Add("Ms_hssvthi");
                DT2.Columns.Add("cauhoi");
                DT2.Columns.Add("dapan");
                DT2.Columns.Add("lanthi");
                int I = 0;
                int CNT = 0;
                int J = 0;
                Random RS = new Random();

                while (DTCOPY.Rows.Count > 0)
                {
                    CNT = DTCOPY.Rows.Count - 1;
                    try
                    {
                        J = RS.Next(CNT);
                        DT2.Rows.Add(DTCOPY.Rows[J]["Ms_hssvthi"], DTCOPY.Rows[J]["cauhoi"], DTCOPY.Rows[J]["dapan"], DTCOPY.Rows[J]["lanthi"]);
                    }
                    catch (Exception ex)
                    {
                    }
                    DTCOPY.Rows.RemoveAt(J);
                }
                //Insert
                foreach (DataRow row in DT2.Rows)
                {
                    string cauhoi = row["cauhoi"].ToString();
                    string dapan = row["dapan"].ToString();
                    string sothutu = row["cauhoi"].ToString();
                    msql = "exec Set_cauhoidethi '" + Ms_hssvthi + "','"+cauhoi+"','" + dapan + "','"+lanthi+"'";
                    mLibrary.RunProc(msql);
                    //mFile.WriteFile("Message", "Client đang thực thi menthod: TaoDataKhiChonMon (Câu " + cauhoi + ",Đáp án: " + dapan + ")");

                    writefile("Đang thực thi menthod: TaoDataKhiChonMon (Câu " + cauhoi + ",Đáp án: " + dapan + ")", MaNguoiDung);
                    this.thongbao("Đang thực thi menthod: TaoDataKhiChonMon (Câu " + cauhoi + ",Đáp án: " + dapan + ")", MaNguoiDung);


                }





            }
        }
        public void writefile(string thongbao, string lMaNguoiDung)
        {
            mFile.WriteFile("Message", lMaNguoiDung + "--" + DateTime.Now + "--" + thongbao);
        }
        public void thongbao(string thongbao, string lMaNguoiDung)
        {
            string method = lMaNguoiDung + "--" + DateTime.Now + "--" + thongbao;
            msql = "insert tb_nhatky([user],method)" +
                    " values('" + lMaNguoiDung + "',N'" + method + "')";
            mLibrary.RunProc(msql);
        }
        public bool UserExit(string MaNguoiDung, string user)
        {
            bool exit = true;
            try
            {
                msql = "update dbo.tb_TruyCap set status=0 where [user]='" + user + "'";
                mLibrary.RunProc(msql);

                //string method = user.Trim() + "--" + DateTime.Now + "--" + "Đã thoát khỏi hệ thống";
                //msql = "insert tb_nhatky([user],method)" +
                //        " values('" + user.Trim() + "',N'" + method + "')";
                //mLibrary.RunProc(msql);
                writefile("Đã thoát khỏi hệ thống", MaNguoiDung);
                thongbao("Đã thoát khỏi hệ thống", MaNguoiDung);
            }
            catch (Exception)
            {

            }
            return exit;
        }

        public bool CheckLogin(string user, string pass)
        {
            try
            {                
                if (user != "" || pass != "")
                {
                    msql = "Select hovaten from tb_hssv  Where ms_hssv='" + user + "' and cast(pass as varbinary)='" + pass + "'";
                    string manguoidung = mLibrary.Timten(msql);
                    if (manguoidung != "")//ton tai nguoi dung
                    {
                        checkLogin = true;
                        lMaNguoiDung = user;
                        lUser = user;

                        //Ghi nhan thong tin dang nhap
                        msql = "insert into dbo.tb_TruyCap ([user],name,status)" +
                               " values(N'" + user.Trim() + "',N'" + manguoidung.Trim() + "',1)";
                        mLibrary.RunProc(msql);

                        //string method=user.Trim()+"--"+DateTime.Now+"--"+"Đang kết nối vào hệ thống thi trắc nghiệm";
                        //msql = "insert tb_nhatky([user],method)"+
                        //        " values('"+user.Trim()+"',N'"+method+"')";
                        //mLibrary.RunProc(msql);
                        writefile("Đang kết nối vào hệ thống thi trắc nghiệm",user);
                        thongbao("Đang kết nối vào hệ thống thi trắc nghiệm",user);
                    }
                    else
                    {
                        checkLogin = false;                        
                    }
                }
                else
                {
                    checkLogin = false;
                    //MessageBox.Show("Tên đăng nhập hoặc mật khẩu không đúng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
                //mFile.WriteFile("Message", "Client đang kết nối vào hệ thống thi trắc nghiệm");
                //mFile.WriteFile("Message", "Client đang thực thi menthod: CheckLogin");
            }
            catch (Exception)
            {
                checkLogin = false;
                // MessageBox.Show("Tên đăng nhập hoặc mật khẩu không đúng", "Thông báo", MessageBoxButtons.OK, MessageBoxIcon.Error);

            }
            return checkLogin;
        }

        public string GetUser()
        {
            return lUser;
        }
        public string GetMaNguoiDung()
        {
            return lMaNguoiDung;
        }
        public string GetHost()
        {
            return lHost;
        }
        public DataTable LoginCauHinhBangDiem(string MaNguoiDung)
        {
            msql = "Select * from tb_cauhinhbangdiem where muc0=0";
            DataTable dt = mLibrary.GetDataTable(msql, "ad");
            //mFile.WriteFile("Message", "Client đang thực thi menthod: LoginCauHinhBangDiem");
            writefile("Đang thực thi menthod: LoginCauHinhBangDiem",MaNguoiDung);
            thongbao("Đang thực thi menthod: LoginCauHinhBangDiem",MaNguoiDung);
            return dt;
         
        }

        /////////////////////////////////////CHON MON
        public DataTable MonThi(string Manguoidung)
        {
            msql = "Select a.ms_hssvthi,b.ms_Mondaotao,b.Mondaotao,a.ngaythi,a.lanthi ,d.ms_lop,d.Tenlop," +
                  " g.tenloaithi,g.Ms_loaithi from tb_hssvthi a inner join tb_Mondaotao b " +
                  " on a.ms_Mondaotao=b.ms_Mondaotao inner join tb_cauhinhlop c " +
                  " on b.MS_Mondaotao=C.MS_mondaotao inner join tb_lopdaotao d " +
                  " on c.ms_lop=d.ms_lop inner join tb_hssvlop e " +
                  " on a.ms_hssv=e.ms_hssv and c.ms_lop=e.ms_lop " +
                  " inner join tb_cauhinh_loaihinhthi f " +
                  " on a.ms_Mondaotao=f.ms_Mondaotao and a.ms_Loaithi=f.ms_Loaithi " +
                  " inner join tb_loaihinhthi g on g.MS_loaithi=f.MS_loaithi " +
                  " where a.ms_hssv='" + Manguoidung + "'" +
                  "  and a.diemthi is null and a.ngaythi <=getdate()";
            DataTable dt1 = mLibrary.GetDataTable(msql, "q");           
            //mFile.WriteFile("Message", "Client đang thực thi menthod: MonThi");
            writefile("Đang thực thi menthod: MonThi",Manguoidung);
            thongbao("Đang thực thi menthod: MonThi",Manguoidung);
            return dt1;

        }

        public DataTable GhiChuTruocVaSauKhi(string MaNguoiDung,string ms_Mondaotao)
        {
            msql = "Select * from tb_masodethi where ms_Mondaotao=" + ms_Mondaotao;
            DataTable dt1 = mLibrary.GetDataTable(msql, "q");           
           // mFile.WriteFile("Message", "Client đang thực thi menthod: GhiChuTruocVaSauKhi");
            writefile("Đang thực thi menthod: GhiChuTruocVaSauKhi",MaNguoiDung);
            thongbao("Đang thực thi menthod: GhiChuTruocVaSauKhi",MaNguoiDung);
            return dt1;
        }
        public DataTable ThongTinSauThi(string MaNguoiDung,string MS_hssvthi, string lop, string Manguoidung, string MS_Mondaotao, string lanthi)
        {
            msql = "select * from dbo.tb_hssvthi where MS_hssvthi= " + MS_hssvthi +
                                                    " and MS_Lop='" + lop + "' and MS_hssv='" + Manguoidung + "' " +
                                                    " and MS_Mondaotao=" + MS_Mondaotao + " and  lanthi=" + lanthi;
            DataTable dt1 = mLibrary.GetDataTable(msql, "q");           
            //mFile.WriteFile("Message", "Client đang thực thi menthod: ThongTinSauThi");
            writefile("Đang thực thi menthod: ThongTinSauThi",MaNguoiDung);
            thongbao("Đang thực thi menthod: ThongTinSauThi",MaNguoiDung);
            return dt1;
        }
        public DataTable LayThongTinCauHoi(string MaNguoiDung,string m_Lanthi, string ms_hssvthi, string ms_lop, int thutu)
        {
            msql = "Select a.* from tb_Nganhangdethi a inner join tb_cauhinhlop b on (a.ms_Mondaotao=b.ms_Mondaotao) " +
                          " inner join tb_hssvlop c on (b.ms_lop=c.ms_lop)inner join tb_hssvthi d on " +
                          " (b.ms_Mondaotao=d.ms_mondaotao) and d.ms_hssv=c.ms_hssv inner join tb_HSSVthiCT e on " +
                          " (d.MS_hssvthi=e.MS_hssvthi) where a.cauhoi=e.cauhoi and e.MS_hssvthi=" + ms_hssvthi + " and e.cauhoiID=" + thutu +
                          " and e.lanthi=" + m_Lanthi + " and b.ms_lop='" + ms_lop + "' order by a.cauhoiid";
            DataTable dtThongTinCauHoi = mLibrary.GetDataTable(msql, "qw");           
            //mFile.WriteFile("Message", "Client đang thực thi menthod: LayThongTinCauHoi (Câu "+thutu+")");
            writefile("Đang thực thi menthod: LayThongTinCauHoi (Câu " + thutu + ")", MaNguoiDung);
            thongbao("Đang thực thi menthod: LayThongTinCauHoi (Câu " + thutu + ")", MaNguoiDung);
            return dtThongTinCauHoi;
        }
        public void CapNhatCauHoiDaChon(string MaNguoiDung,string traloi, string m_ms_hssvthi, int m_Tab, string m_Lanthi)
        {
            msql = "  Update tb_hssvthiCT set thoigian=getdate(), traloi='" + traloi + "' " +
                                         " where MS_hssvthi=" + m_ms_hssvthi + " and CauhoiID=" + m_Tab + " and lanthi=" + m_Lanthi;
            mLibrary.RunProc(msql);
            //mFile.WriteFile("Message", "Client đang thực thi menthod: CapNhatCauHoiDaChon (Câu " + m_Tab + "),(Trả lời: "+traloi+")");
            writefile("Đang thực thi menthod: CapNhatCauHoiDaChon (Câu " + m_Tab + "),(Trả lời: " + traloi + ")",MaNguoiDung);
            thongbao("Đang thực thi menthod: CapNhatCauHoiDaChon (Câu " + m_Tab + "),(Trả lời: " + traloi + ")",MaNguoiDung);
        }
        public void CapNhatcauHoiNhungChuaChonLuu(string MaNguoiDung,string m_ms_hssvthi, int m_Tab, string m_Lanthi)
        {
            msql = " Update tb_hssvthiCT set thoigian=getdate(), traloi='' where MS_hssvthi=" + m_ms_hssvthi +
                                         " and CauhoiID=" + m_Tab + " and lanthi=" + m_Lanthi;
            mLibrary.RunProc(msql);
            //mFile.WriteFile("Message", "Client đang thực thi menthod: CapNhatcauHoiNhungChuaChonLuu (Câu "+m_Tab+")");
            writefile("Đang thực thi menthod: CapNhatcauHoiNhungChuaChonLuu (Câu " + m_Tab + ")",MaNguoiDung);
            thongbao("Đang thực thi menthod: CapNhatcauHoiNhungChuaChonLuu (Câu " + m_Tab + ")",MaNguoiDung);
        }
        public DataTable KiemTraDiem(string MaNguoiDung, string m_Lanthi, string m_ms_hssvthi)
        {
            DataTable dtDiem = null;
            msql = "select * from tb_HSSVthiCT where lanthi=" + m_Lanthi + " and ms_hssvthi=" + m_ms_hssvthi;
            dtDiem = mLibrary.GetDataTable(msql, "Diem");
            //mFile.WriteFile("Message", "SINH VIÊN ĐÃ KẾT THÚC BÀI THI");
            //mFile.WriteFile("Message", "Client đang thực thi menthod: KiemTraDiem");
            writefile("SINH VIÊN ĐÃ KẾT THÚC BÀI THI",MaNguoiDung);
            writefile("Đang thực thi menthod: KiemTraDiem",MaNguoiDung); 
            thongbao("SINH VIÊN ĐÃ KẾT THÚC BÀI THI",MaNguoiDung);
            thongbao("Đang thực thi menthod: KiemTraDiem",MaNguoiDung);
            return dtDiem;
        }

        public void CapNhatThongTinThi(string MaNguoiDung, int Diemthi, int ketquathi, string m_ms_hssvthi, string m_ms_Mondaotao, string m_Lanthi, string ms_loaithi)
        {
            msql = " Update tb_hssvthi set Diemthi =" + Diemthi + " ,Ketqua=" + ketquathi + " where ms_hssvthi='" + m_ms_hssvthi + "' and ms_Mondaotao='" + m_ms_Mondaotao + "' " +
                     " and Lanthi=" + m_Lanthi + " and Ms_loaithi=" + ms_loaithi;
            mLibrary.RunProc(msql);
            string value = "";
            if (ketquathi == 1) value = "Đạt";
            else value = "Hỏng";

            //mFile.WriteFile("Message", "Kết quả của thí sinh: " + m_ms_hssvthi + "  (Điểm:" + Diemthi + "," + value + ")");
            writefile("Kết quả của thí sinh: " + m_ms_hssvthi + "  (Điểm:" + Diemthi + "," + value + ")",MaNguoiDung);
            thongbao("Kết quả của thí sinh: " + m_ms_hssvthi + "  (Điểm:" + Diemthi + "," + value + ")",MaNguoiDung);
        }
        //////////////////////////////////////////////
    }
   
}
